package com.yc.cloud.portal.utils;

import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.yc.cloud.common.basic.exception.Asserts;
import com.yc.cloud.portal.request.MediaCaptureParam;
import com.yc.cloud.portal.request.MediaLocationInfoParam;
import com.yc.cloud.portal.request.MediaOcrInfoParam;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
@Slf4j
public class HSRequestManager {
    private static volatile HSRequestManager instance;

    // 从 application.yml 中读取 URL
    @Value("${hs.url}")
    private String hsUrl;

    // 私有构造函数
    public HSRequestManager() {
        // 全局设置超时时间，单位为毫秒
//        HttpRequest.setGlobalTimeout(5000); // 5秒超时
        log.info("HSRequestManager initialized, hsUrl:{}", hsUrl);
    }

//    @PostConstruct
//    public void init() {
//        // 这里确保 hsUrl 变量已经被注入
//        log.info("HSRequestManager initialized, hsUrl: {}", hsUrl);
//    }

    // 获取单例实例
//    public static HSRequestManager getInstance() {
//        if (instance == null) { // 第一次检查
//            synchronized (HSRequestManager.class) { // 同步锁
//                if (instance == null) { // 第二次检查
//                    instance = new HSRequestManager();
//                }
//            }
//        }
//        return instance;
//    }

    // 通用的 POST 请求方法
    private String sendPostRequest(String endpoint, Object params) {
        // 完整的 URL
        String url = hsUrl + endpoint; // 前缀风格的 URL
        String jsonPayload = JSONUtil.toJsonStr(params);

        try {
            // 执行 POST 请求并获取响应
            val result = HttpUtil.post(url, jsonPayload, 5000);
            if (result.contains("Error request") || result.contains("response status: 502")) {
                log.error("POST request to {} failed, result: {}", url, result);
                Asserts.fail("慧视API服务调用失败502，请联系管理员");
            }
            log.info("POST request to {} succeeded, result: {}", url, result);
            return result;
        } catch (Exception e) {
            log.error("Error occurred while sending POST request to {}: {}", url, e.getMessage());
            Asserts.fail(e.getMessage());
            return null; // 或者抛出自定义异常以供其他地方捕获

        }
    }

    // 发送 basicInfo 请求
    public String basicInfo(String deviceNum, String deviceType, String state) {
        // 创建请求参数
        Map<String, String> params = new HashMap<>();
        params.put("deviceNum", deviceNum);
        params.put("deviceType", deviceType);
        params.put("state", state);

        return sendPostRequest("/media/basicInfo", params);
    }

    // 发送 capture 请求
    public String capture(MediaCaptureParam param) {
        return sendPostRequest("/media/capture", param);
    }

    // 发送 capture 请求
    public String ocrInfo(MediaOcrInfoParam param) {
        return sendPostRequest("/media/ocr/info", param);
    }

    public String locationInfo(MediaLocationInfoParam param) {
        return sendPostRequest("/media/location/info", param);
    }

//    // 其他请求方法示例
//    public String someOtherRequest(Map<String, String> someParams) {
//        return sendPostRequest("/media/someOtherEndpoint", someParams);
//    }

    // 您可以继续添加其他请求方法...
}
